<?php

class Nippy_Image {
	/**
	 * Изменяет размер изображения, сохраняя пропорции
	 * @param string $originalFile	- путь к оригиналу изображения
	 * @param string $fileExtention	- расширение изображения
	 * @param int $endWidth			- конечная ширина
	 * @param int $endHeight		- конечная высота
	 * @param string $endFilename	- шаблон имени измененного изображения, в шаблоне допускаются следующие подстановки
	 * 									%w - полученная после масштабирования ширина
	 * 									%h - полученная после масштабирования высота
	 * @return void
	 */
	public static function ResizeImage($originalFile,$fileExtention,$endWidth,$endHeight,$endFilename ){
		$p = self::_getFunctionPostfix($fileExtention);
		$create_funct = 'imagecreatefrom'.$p;
		$out_funct = 'image'.$p;
		list($width, $height) = getimagesize($originalFile);
		
		$k = min($endWidth/$width,$endHeight/$height);
					
		$endWidth = round(($k<1) ? $k*$width : $width);
		$endHeight = round(($k<1) ? $k*$height : $height);

		$source = $create_funct($originalFile);
		$thumb = imagecreatetruecolor($endWidth,$endHeight); //new img
		imagecopyresampled($thumb,$source,0,0,0,0,$endWidth,$endHeight,$width,$height);
		imagedestroy($source);
		$endFilename = str_replace('%w',$endWidth,$endFilename);
		$endFilename = str_replace('%h',$endHeight,$endFilename);
		if ($p=='png')
			$out_funct($thumb,$endFilename,9);
		else
			$out_funct($thumb,$endFilename,100);
		imagedestroy($thumb);
		return array($endWidth,$endHeight);
	}
	
	private static function _getFunctionPostfix($fileExtention)
	{
		$ext = strtolower($fileExtention);
		
		if (($ext!="jpg")  &&  ($ext!="gif")  &&  ($ext!="png")) 
			throw new Zend_Exception("Данный формат изображения ($ext) не поддерживается");
		return ($ext=="jpg")?'jpeg':$ext;
	}
}

?>